package modelo;

import clases.Compra;
import clases.OrdenCompra;
import clases.Proveedor;
import clases.Usuario;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;

/**
 *
 * @author edder
 */
public class MdlCompra implements Modelo<Compra>{

    @Override
    public void insert(Compra objeto, Conexion cnx) throws SQLException {
        String sql = "INSERT INTO compra(fecha, monto, igv, idOrdenCompra, idProveedor, idUsuario, estado) "
                + "VALUES('" + objeto.getFecha().toString() + "', "
                + objeto.getMonto() + ", "
                + objeto.getIgv() + ", "
                + objeto.getOrdenCompra().getIdOrdenCompra() + ", "
                + objeto.getProveedor().getIdProveedor() + ", "
                + objeto.getUsuario().getIdUsuario() + ", '"
                + objeto.getEstado() + "');";
        cnx.ejecutar(sql);
    }

    @Override
    public int getLastId(Conexion cnx) throws SQLException {
        String sql = "SELECT MAX(idCompra) FROM compra";
        ResultSet rs = cnx.consultar(sql);
        if(rs.next())
            return rs.getInt(1);
        return -1;
    }

    @Override
    public void update(Compra objeto, Conexion cnx) throws SQLException {
        String sql = "UPDATE compra SET "
                + "fecha = '" + objeto.getFecha().toString() + "', "
                + "monto = " + objeto.getMonto() + ", "
                + "igv = " + objeto.getIgv() + ", "
                + "idOrdenCompra = " + objeto.getOrdenCompra().getIdOrdenCompra() + ", "
                + "idProveedor = " + objeto.getProveedor().getIdProveedor() + ", "
                + "idUsuario = " + objeto.getUsuario().getIdUsuario() + ", "
                + "estado = '" + objeto.getEstado() + "' "
                + "WHERE idComrpa = " + objeto.getIdCompra();
        cnx.ejecutar(sql);
    }

    @Override
    public ArrayList<Compra> get(String query, Conexion cnx) throws SQLException {
        ArrayList<Compra> compras = new ArrayList<>();
        ResultSet rs = cnx.consultar(query);        
        while(rs.next()){
            compras.add(new Compra(
                    rs.getInt("idCompra "), 
                    LocalDate.parse("fecha"), 
                    rs.getFloat("monto"), 
                    rs.getFloat("igv"),
                    new OrdenCompra(){
                        {
                            this.setIdOrdenCompra(rs.getInt("idOrdenCompra"));
                        }
                    },
                    new Proveedor(){
                        {
                            this.setIdProveedor(rs.getInt("idProveedor"));
                        }
                    },
                    new Usuario(){
                        {
                            this.setIdUsuario(rs.getInt("idUsuario"));
                        }
                    },
                    rs.getString("estado").charAt(0)
            ));
        }
        return compras;
    }

    @Override
    public Compra get(int id, Conexion cnx) throws SQLException {
        String sql = "SELECT * FROM compra WHERE idCompra = " + id;
        ResultSet rs = cnx.consultar(sql);
        if(rs.next())
            return new Compra(
                    rs.getInt("idCompra "), 
                    LocalDate.parse("fecha"), 
                    rs.getFloat("monto"), 
                    rs.getFloat("igv"),
                    new OrdenCompra(){
                        {
                            this.setIdOrdenCompra(rs.getInt("idOrdenCompra"));
                        }
                    },
                    new Proveedor(){
                        {
                            this.setIdProveedor(rs.getInt("idProveedor"));
                        }
                    },
                    new Usuario(){
                        {
                            this.setIdUsuario(rs.getInt("idUsuario"));
                        }
                    },
                    rs.getString("estado").charAt(0));
        return null;
    }
    
}
